package com.tedu.review.day02;


/**
 * 类的创建过程(JVM虚拟机--内存创建流程：找、堆、方法区)
 * 1，从程序入口 加载xxx.class文件，类对象存到方法区中【方法区；并行】
 * 2，如果发现 加载xxx.class文件中，存在static静态块，存入方法区，创建对象之前提前调用
 * 3，发现cs，引用，将这个引用转为地址值：0X000，存入栈内存【栈区，并行】
 * 4，发现new  对象(),在堆内存中，给对象申请随意空间
 * 解：宾馆，很多屋子！前台服务员【引用】---来一个客人【new】，随意开个房
 * 5，类的创建【实例化】执行步骤，先执行方法区：静态块-->执行普通代码块-->初始化
 * 6，给栈中生成的地址值进行指向，堆内存中随意开辟空间(初始值)【与栈内存地址一致】
 * 7，给栈中生成的地址值进行指向，堆内存中随意开辟空间(初始值)【与栈内存地址一致】
 *
 * 调用结束操作：
 * 1，栈：编译器自动分配，使用完毕自动释放
 * 2，堆：一般由程序员分配释放，若程序员没有释放，Java程序自动进行垃圾回收
 *                                        GC垃圾回收
 * 3，全局区(静态区)：全局变量和静态变量在内存中存在一起的
 *                 初始化的全局变量和静态变量在内存中存在一起的
 *                 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域
 *                 ---程序结束 释放
 *4，常量池：存在方法区中
 */

public class 类的创建过程 {
    /*完成一次创建对象*/
    public static void main(String[] args) {
        /**/
        CountrySide cs = new CountrySide();
    }
}
/**
 * 测试类：类创建过程       一个.java文件，创建两个类*/
class CountrySide{
 /*代码块 */
 {
     System.out.println("请问厕所在哪个科室，赵四");
 }
 /*静态代码 */
    static{
     System.out.println("爹，我跟小蒙的事以后你就别管了~");
 }
 /*①成员变量：变量，类中存在变量就是成员变量，可以由修饰符修饰 */
    private String name="赵四";
    private int age=56;
    /*②构造器，创建对象初始化*/
    public CountrySide(){
        name="刘能";
        System.out.println(name+"这车能看不能摸，但是可以往外说~");
    }
}